今天要學習的內容雖然很基礎,但卻是許多進階算法的根基。這些資料結構在解題時非常常用,不管是操作數組、處理鏈表,還是實現棧與佇列,理解它們的概念和應用至關重要。
學習影片:
https://www.youtube.com/watch?v=-LmHUlozTqE
https://www.youtube.com/watch?v=0Kiunabmm0w
https://www.youtube.com/watch?v=JSKtJqj2pwc
講的超詳細的👍👍
array 和 linked list 在實作中的區別在 Python 中使用 stack = [] 這種語法時,實際上是在創建一個 Python 的 list,在 Python 中,list 是一種基於 動態數組(dynamic array) 的資料結構。
Python 的 list 是數組嗎?
是的,Python 中的 list 內部實現是基於 動態數組,因此它可以自動調整大小。
當使用 stack = [],這個 stack 是使用數組實現的,可以利用它來模擬棧(Stack)的行為。list vs array 的區別:
Array(數組) 在某些語言(例如 C 或 Java)中通常是固定大小的,當需要插入或刪除元素時,可能需要重新分配內存。
Python 的 list 是動態的,可以在尾部、頭部或中間插入和刪除元素,並且可以自動調整大小,因此不需要手動管理內存。
使用兩個 stack 模擬佇列的先進先出 (FIFO) 行為。
解題思路in_stack 用於插入元素,out_stack 用於取出元素,當需要 pop 或 peek 時將 in_stack 中元素移至 out_stack。
class MyQueue(object):
    def __init__(self):
        self.in_stack = []
        self.out_stack = []
    def push(self, x: int) -> None:
        self.in_stack.append(x)
    def pop(self) -> int:
        self.move_in_to_out()
        return self.out_stack.pop()
    def peek(self) -> int:
        self.move_in_to_out()
        return self.out_stack[-1]
    def empty(self) -> bool:
        return not self.in_stack and not self.out_stack
    def move_in_to_out(self):
        # 只有當 out_stack 為空時,才將 in_stack 的元素全部移到 out_stack
        if not self.out_stack:
            while self.in_stack:
                self.out_stack.append(self.in_stack.pop())